# -*- coding: utf-8 -*-
"""
@Time: 2025/1/18 11:20
@Auth: LYQ
@File: user_service.py
@Note: 用户基础操作
"""
import json
import os

#【接口1.1.1】POST /user/register    # 用户注册
from flask import Flask
import time

app = Flask(__name__)

# 用户注册函数
def register_user(username, password, email=None):
    try:
        # 遍历所有的用户 JSON 文件，检查是否已经存在相同用户名
        for file_name in os.listdir('../data/raw/user_data/'):
            if file_name.endswith('.json'):
                file_path = os.path.join('../data/raw/user_data/', file_name)
                with open(file_path, 'r', encoding='utf-8') as f:
                    user_data = json.load(f)
                    if user_data["username"] == username:  # 如果找到相同的用户名
                        return None  # 注册失败，返回 None

        # 如果没有相同的用户名，继续注册
        user_id = str(int(time.time()))  # 模拟生成用户ID
        user_data = {
            "user_id": user_id,
            "username": username,
            "password": password,
            "email": email
        }

        # 确保保存路径存在
        user_data_folder = '../data/raw/user_data/'
        if not os.path.exists(user_data_folder):
            os.makedirs(user_data_folder)

        # 保存用户信息到 JSON 文件
        file_path = os.path.join(user_data_folder, f'{username}_{int(time.time())}.json')  # 文件命名格式：用户名_时间戳.json
        with open(file_path, 'w', encoding='utf-8') as f:
            json.dump(user_data, f, ensure_ascii=False, indent=4)

        # 返回用户数据
        return user_data
    except Exception as e:
        print("【接口1.1.1】用户注册报错：", e)
        return None

#【接口1.1.2】POST /user/login      # 用户登录
import jwt
import time

# 密钥用于加密和解密 token
SECRET_KEY = 'your_secret_key'

# 生成 token 的函数
def generate_token(user_data):
    payload = {
        "user_id": user_data["user_id"],
        "username": user_data["username"],
        "exp": time.time() + 3600  # 设置过期时间为1小时
    }
    return jwt.encode(payload, SECRET_KEY, algorithm='HS256')

# 用户登录函数
def login_user(username, password):
    try:
        # 遍历所有的用户 JSON 文件
        for file_name in os.listdir('../data/raw/user_data/'):
            if file_name.endswith('.json'):
                file_path = os.path.join('../data/raw/user_data/', file_name)
                with open(file_path, 'r', encoding='utf-8') as f:
                    user_data = json.load(f)
                    # 检查用户名和密码
                    if user_data["username"] == username and user_data["password"] == password:
                        # 登录成功后生成 token
                        token = generate_token(user_data)
                        user_data["token"] = token  # 可以将 token 添加到返回数据中
                        return user_data  # 返回包含 token 的用户数据
        return None  # 如果找不到匹配的用户信息
    except Exception as e:
        print("【接口1.1.2】登录报错：", e)
        return None


#【接口1.1.3】GET /user/profile     # 获取用户信息

# 获取用户信息函数
def get_user_profile(user_id):
    try:
        # 遍历所有的用户 JSON 文件
        for file_name in os.listdir('../data/raw/user_data/'):
            if file_name.endswith('.json'):
                file_path = os.path.join('../data/raw/user_data/', file_name)
                with open(file_path, 'r', encoding='utf-8') as f:
                    user_data = json.load(f)
                    print(f"读取到的用户数据: {user_data}")
                    # 如果找到匹配的 user_id，则返回该用户信息
                    if str(user_data["user_id"]) == str(user_id):
                        return user_data
        return None  # 如果找不到匹配的用户信息
    except Exception as e:
        print("【接口1.1.3】获取用户信息报错：", e)
        return None
